/*
 *  socket.h
 */

#ifndef SOCKET_H
#define SOCKET_H

#include <arpa/inet.h>
#include <cstddef>
#include <sys/socket.h>

typedef struct sockaddr sockaddr_t;
typedef struct sockaddr_storage sockaddr_storage_t;
typedef struct sockaddr_in sockaddr_in_t;

class Socket {

public:
    Socket(const int port, const char* ipaddr = NULL);
    ~Socket();
    void connect();
    void bind();
    void listen(int backlog);
    Socket* accept();
    int send(char *buf, int size);
    int recv(char *buf, int size);
    int recv(char **buf, char stop);

private:
    int sockfd;
    sockaddr_in_t sockaddr;
    Socket(const int sockfd, const sockaddr_in_t* sockaddr);
};

#endif  //SOCKET_H

//{+}

